// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef PUBLIC_FPDF_PROGRESSIVE_H_
#define PUBLIC_FPDF_PROGRESSIVE_H_

#include "fpdfview.h"

//Flags for progressive process status.
#define FPDF_RENDER_READER          0
#define FPDF_RENDER_TOBECOUNTINUED  1
#define FPDF_RENDER_DONE            2
#define FPDF_RENDER_FAILED          3


#ifdef __cplusplus
extern "C" {
#endif


//IFPDF_RENDERINFO interface.
typedef struct _IFSDK_PAUSE
{
    /**
    * Version number of the interface. Currently must be 1.
    **/
    int version;

    /*
    * Method: NeedToPauseNow
    *           Check if we need to pause a progressive process now.
    * Interface Version:
    *           1
    * Implementation Required:
    *           yes
    * Parameters:
    *           pThis       -   Pointer to the interface structure itself
    * Return Value:
    *            Non-zero for pause now, 0 for continue.
    *
    */
    FPDF_BOOL (*NeedToPauseNow) (struct _IFSDK_PAUSE* pThis);

    //A user defined data pointer, used by user's application. Can be NULL.
    void*       user;
} IFSDK_PAUSE;

// Function: FPDF_RenderPageBitmap_Start
//          Start to render page contents to a device independent bitmap progressively.
// Parameters:
//          bitmap      -   Handle to the device independent bitmap (as the output buffer).
//                          Bitmap handle can be created by FPDFBitmap_Create function.
//          page        -   Handle to the page. Returned by FPDF_LoadPage function.
//          start_x     -   Left pixel position of the display area in the bitmap coordinate.
//          start_y     -   Top pixel position of the display area in the bitmap coordinate.
//          size_x      -   Horizontal size (in pixels) for displaying the page.
//          size_y      -   Vertical size (in pixels) for displaying the page.
//          rotate      -   Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
//                              2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
//          flags       -   0 for normal display, or combination of flags defined above.
//          pause       -   The IFSDK_PAUSE interface.A callback mechanism allowing the page rendering process
// Return value:
//          Rendering Status. See flags for progressive process status for the details.
//
DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y, int size_x,
                                                   int size_y, int rotate, int flags,IFSDK_PAUSE * pause);

// Function: FPDF_RenderPage_Continue
//          Continue rendering a PDF page.
// Parameters:
//          page        -   Handle to the page. Returned by FPDF_LoadPage function.
//          pause       -   The IFSDK_PAUSE interface.A callback mechanism allowing the page rendering process
//                          to be paused before it's finished. This can be NULL if you don't want to pause.
// Return value:
//          The rendering status. See flags for progressive process status for the details.
DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,IFSDK_PAUSE * pause);

// Function: FPDF_RenderPage_Close
//          Release the resource allocate during page rendering. Need to be called after finishing rendering or
//          cancel the rendering.
// Parameters:
//          page        -   Handle to the page. Returned by FPDF_LoadPage function.
// Return value:
//          NULL
DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page);

#ifdef __cplusplus
}
#endif

#endif  // PUBLIC_FPDF_PROGRESSIVE_H_
